home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 June: Reference Library / Dev.CD Jun 95 / Dev.CD Jun 95.toast / What's New? / New System Software Extensions / QuickDraw 3D ß / Programming / Interfaces / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-04  |  9.6 KB  |  369 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DPick.h                                                 **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     Public picking routines                                  **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1992-1994 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                          **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DPick_h
  15. #define QD3DPick_h
  16.  
  17. #if PRAGMA_ONCE
  18.     #pragma once
  19. #endif
  20.  
  21. #include "QD3DStyle.h"
  22. #include "QD3DGeometry.h"
  23.  
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif  /*  __cplusplus  */
  27.  
  28.  
  29. /*****************************************************************************
  30.  **                                                                            **
  31.  **                            Mask bits for hit information                     **
  32.  **                                                                            **
  33.  *****************************************************************************/
  34.  
  35. typedef enum TQ3PickDetailMasks {
  36.     kQ3PickDetailNone                    = 0,
  37.     kQ3PickDetailMaskPickID             = 1 << 0,
  38.     kQ3PickDetailMaskPath                 = 1 << 1,
  39.     kQ3PickDetailMaskObject             = 1 << 2,
  40.     kQ3PickDetailMaskLocalToWorldMatrix    = 1 << 3,
  41.     kQ3PickDetailMaskXYZ                 = 1 << 4,
  42.     kQ3PickDetailMaskDistance             = 1 << 5,
  43.     kQ3PickDetailMaskNormal             = 1 << 6,
  44. #if defined(ESCHER_VER_15) && (ESCHER_VER_15)
  45.     kQ3PickDetailMaskShapePart             = 1 << 7,
  46.     kQ3PickDetailMaskUV                 = 1 << 8,
  47.     kQ3PickDetailMaskNeighborhood        = 1 << 9
  48. #else
  49.     kQ3PickDetailMaskShapePart             = 1 << 7
  50. #endif  /*  ESCHER_VER_15  */
  51. } TQ3PickDetailMasks;
  52.  
  53. typedef unsigned long TQ3PickDetail;
  54.  
  55.  
  56. /******************************************************************************
  57.  **                                                                             **
  58.  **                                Hitlist sorting                                 **
  59.  **                                                                             **
  60.  *****************************************************************************/
  61.  
  62. typedef enum TQ3PickSort {
  63.     kQ3PickSortNone,
  64.     kQ3PickSortNearToFar,
  65.     kQ3PickSortFarToNear
  66. } TQ3PickSort;
  67.  
  68.  
  69. /******************************************************************************
  70.  **                                                                             **
  71.  **                    Data structures to set up the pick object                 **
  72.  **                                                                             **
  73.  *****************************************************************************/
  74.  
  75. #define kQ3ReturnAllHits        0
  76.  
  77. typedef struct TQ3PickData {
  78.     TQ3PickSort            sort;
  79.     TQ3PickDetail        mask;
  80.     unsigned long        numHitsToReturn;
  81. } TQ3PickData;
  82.  
  83. typedef struct TQ3WindowPointPickData {
  84.     TQ3PickData            data;
  85.     TQ3Point2D            point;
  86.     float                vertexTolerance;
  87.     float                edgeTolerance;
  88. } TQ3WindowPointPickData;
  89.  
  90. typedef struct TQ3WindowRectPickData {
  91.     TQ3PickData            data;
  92.     TQ3Area                rect;
  93. } TQ3WindowRectPickData;
  94.  
  95.  
  96. /******************************************************************************
  97.  **                                                                             **
  98.  **                                    Hit data                                 **
  99.  **                                                                             **
  100.  *****************************************************************************/
  101.  
  102. typedef struct TQ3HitPath {
  103.     unsigned long             depth;
  104.     TQ3GroupPosition            *positions;
  105. } TQ3HitPath;
  106.  
  107. typedef struct TQ3HitData {
  108.     TQ3PickParts                part;
  109.     TQ3PickDetail            validMask;
  110.     unsigned long             pickID;
  111.     struct TQ3HitPath        path;
  112.     TQ3Object                object;
  113.     TQ3Matrix4x4                localToWorldMatrix;
  114.     TQ3Point3D                xyzPoint;
  115.     float                    distance;
  116.     TQ3Vector3D                normal;
  117.     TQ3ShapePartObject        shapePart;
  118. } TQ3HitData;
  119.  
  120.  
  121. /******************************************************************************
  122.  **                                                                             **
  123.  **                                Pick class methods                             **
  124.  **                                                                             **
  125.  *****************************************************************************/
  126.  
  127. EXPORT TQ3ObjectType Q3Pick_GetType(
  128.     TQ3PickObject        pick);
  129.  
  130. EXPORT TQ3Status Q3Pick_GetData(
  131.     TQ3PickObject        pick,
  132.     TQ3PickData            *data);
  133.  
  134. EXPORT TQ3Status Q3Pick_SetData(
  135.     TQ3PickObject        pick,
  136.     const TQ3PickData    *data);
  137.     
  138. EXPORT TQ3Status Q3Pick_GetVertexTolerance(
  139.     TQ3PickObject        pick,
  140.     float                *vertexTolerance);
  141.     
  142. EXPORT TQ3Status Q3Pick_GetEdgeTolerance(
  143.     TQ3PickObject        pick,
  144.     float                *edgeTolerance);
  145.     
  146. EXPORT TQ3Status Q3Pick_SetVertexTolerance(
  147.     TQ3PickObject        pick,
  148.     float                vertexTolerance);
  149.     
  150. EXPORT TQ3Status Q3Pick_SetEdgeTolerance(
  151.     TQ3PickObject        pick,
  152.     float                edgeTolerance);
  153.  
  154.  
  155. EXPORT TQ3Status Q3Pick_GetNumHits(
  156.     TQ3PickObject        pick,
  157.     unsigned long        *numHits);
  158.     
  159. EXPORT TQ3Status Q3Pick_GetHitData(
  160.     TQ3PickObject        pick,
  161.     unsigned long        index,
  162.     TQ3HitData            *hitData);
  163.  
  164. EXPORT TQ3Status Q3Hit_EmptyData(
  165.     TQ3HitData            *hitData);
  166.  
  167. EXPORT TQ3Status Q3Pick_EmptyHitList(
  168.     TQ3PickObject        pick);
  169.  
  170.     
  171. /******************************************************************************
  172.  **                                                                             **
  173.  **                            Window point pick methods                         **
  174.  **                                                                             **
  175.  *****************************************************************************/
  176.  
  177. EXPORT TQ3PickObject Q3WindowPointPick_New(
  178.     const TQ3WindowPointPickData    *data);
  179.  
  180. EXPORT TQ3Status Q3WindowPointPick_GetPoint(
  181.     TQ3PickObject                    pick,
  182.     TQ3Point2D                        *point);
  183.  
  184. EXPORT TQ3Status Q3WindowPointPick_SetPoint(
  185.     TQ3PickObject                    pick,
  186.     const TQ3Point2D                *point);
  187.  
  188. EXPORT TQ3Status Q3WindowPointPick_GetData(
  189.     TQ3PickObject                    pick,
  190.     TQ3WindowPointPickData            *data);
  191.  
  192. EXPORT TQ3Status Q3WindowPointPick_SetData(
  193.     TQ3PickObject                    pick,
  194.     const TQ3WindowPointPickData    *data);
  195.  
  196.  
  197. /******************************************************************************
  198.  **                                                                             **
  199.  **                            Window rect pick methods                         **
  200.  **                                                                             **
  201.  *****************************************************************************/
  202.  
  203. EXPORT TQ3PickObject Q3WindowRectPick_New(
  204.     const TQ3WindowRectPickData    *data);
  205.  
  206. EXPORT TQ3Status Q3WindowRectPick_GetRect(
  207.     TQ3PickObject                pick,
  208.     TQ3Area                        *rect);
  209.  
  210. EXPORT TQ3Status Q3WindowRectPick_SetRect(
  211.     TQ3PickObject                pick,
  212.     const TQ3Area                *rect);
  213.  
  214. EXPORT TQ3Status Q3WindowRectPick_GetData(
  215.     TQ3PickObject                pick,
  216.     TQ3WindowRectPickData        *data);
  217.  
  218. EXPORT TQ3Status Q3WindowRectPick_SetData(
  219.     TQ3PickObject                pick,
  220.     const TQ3WindowRectPickData    *data);
  221.  
  222.  
  223. #if defined(ESCHER_VER_15) && ESCHER_VER_15
  224.  
  225. /******************************************************************************
  226.  **                                                                             **
  227.  **                    Data structures to set up the pick object                 **
  228.  **                                                                             **
  229.  *****************************************************************************/
  230.  
  231. typedef struct TQ3BoxPickData {
  232.     TQ3PickData            data;
  233.     TQ3BoundingBox        box;
  234. } TQ3BoxPickData;
  235.  
  236. typedef struct TQ3RayPickData {
  237.     TQ3PickData            data;
  238.     TQ3Ray3D                ray;
  239.     float                vertexTolerance;
  240.     float                edgeTolerance;
  241. } TQ3RayPickData;
  242.  
  243. typedef struct TQ3SpherePickData {
  244.     TQ3PickData            data;
  245.     TQ3BoundingSphere    sphere;
  246.     float                vertexTolerance;
  247.     float                edgeTolerance;
  248. } TQ3SpherePickData;
  249.  
  250.  
  251. /******************************************************************************
  252.  **                                                                             **
  253.  **                        World-space box pick methods                         **
  254.  **                                                                             **
  255.  *****************************************************************************/
  256.     
  257. EXPORT TQ3PickObject Q3BoxPick_New(
  258.     const TQ3BoxPickData    *data);
  259.  
  260. EXPORT TQ3Status Q3BoxPick_GetBox(
  261.     TQ3PickObject        pick,
  262.     TQ3BoundingBox        *box);
  263.  
  264. EXPORT TQ3Status Q3BoxPick_SetBox(
  265.     TQ3PickObject        pick,
  266.     const TQ3BoundingBox    *box);
  267.  
  268. EXPORT TQ3Status Q3BoxPick_GetData(
  269.     TQ3PickObject        pick,
  270.     TQ3BoxPickData        *data);
  271.  
  272. EXPORT TQ3Status Q3BoxPick_SetData(
  273.     TQ3PickObject        pick,
  274.     const TQ3BoxPickData    *data);
  275.     
  276.     
  277. /******************************************************************************
  278.  **                                                                             **
  279.  **                        World-space ray pick methods                         **
  280.  **                                                                             **
  281.  *****************************************************************************/
  282.  
  283. EXPORT TQ3PickObject Q3RayPick_New(
  284.     const TQ3RayPickData    *data);
  285.  
  286. EXPORT TQ3Status Q3RayPick_GetRay(
  287.     TQ3PickObject        pick,
  288.     TQ3Ray3D                *ray);
  289.  
  290. EXPORT TQ3Status Q3RayPick_SetRay(
  291.     TQ3PickObject        pick,
  292.     const TQ3Ray3D        *ray);
  293.  
  294. EXPORT TQ3Status Q3RayPick_GetData(
  295.     TQ3PickObject        pick,
  296.     TQ3RayPickData        *data);
  297.  
  298. EXPORT TQ3Status Q3RayPick_SetData(
  299.     TQ3PickObject        pick,
  300.     const TQ3RayPickData    *data);
  301.  
  302.  
  303. /******************************************************************************
  304.  **                                                                             **
  305.  **                        World-space sphere pick methods                         **
  306.  **                                                                             **
  307.  *****************************************************************************/
  308.  
  309. EXPORT TQ3PickObject Q3SpherePick_New(
  310.     const TQ3SpherePickData    *data);
  311.  
  312. EXPORT TQ3Status Q3SpherePick_GetSphere(
  313.     TQ3PickObject            pick,
  314.     TQ3BoundingSphere        *sphere);
  315.  
  316. EXPORT TQ3Status Q3SpherePick_SetSphere(
  317.     TQ3PickObject            pick,
  318.     const TQ3BoundingSphere    *sphere);
  319.  
  320. EXPORT TQ3Status Q3SpherePick_GetData(
  321.     TQ3PickObject            pick,
  322.     TQ3SpherePickData        *data);
  323.  
  324. EXPORT TQ3Status Q3SpherePick_SetData(
  325.     TQ3PickObject            pick,
  326.     const TQ3SpherePickData    *data);
  327.  
  328.  
  329. /******************************************************************************
  330.  **                                                                             **
  331.  **                                Shape Part methods                             **
  332.  **                                                                             **
  333.  *****************************************************************************/
  334.  
  335. EXPORT TQ3ObjectType Q3ShapePart_GetType(
  336.     TQ3ShapePartObject            shapePartObject);
  337.  
  338. EXPORT TQ3ObjectType Q3MeshPart_GetType(
  339.     TQ3MeshPartObject            meshPartObject);
  340.  
  341. EXPORT TQ3Status Q3ShapePart_GetShape(
  342.     TQ3ShapePartObject            shapePartObject,
  343.     TQ3ShapeObject                *shapeObject);
  344.  
  345. EXPORT TQ3Status Q3MeshPart_GetComponent(
  346.     TQ3MeshPartObject            meshPartObject,
  347.     TQ3MeshComponent                *component);
  348.  
  349. EXPORT TQ3Status Q3MeshFacePart_GetFace(
  350.     TQ3MeshFacePartObject        meshFacePartObject,
  351.     TQ3MeshFace                    *face);
  352.  
  353. EXPORT TQ3Status Q3MeshEdgePart_GetEdge(
  354.     TQ3MeshEdgePartObject        meshEdgePartObject,
  355.     TQ3MeshEdge                    *edge);
  356.  
  357. EXPORT TQ3Status Q3MeshVertexPart_GetVertex(
  358.     TQ3MeshVertexPartObject        meshVertexPartObject,
  359.     TQ3MeshVertex                *vertex);
  360.  
  361.  
  362. #endif    /* ESCHER_VER_15 */
  363.  
  364. #ifdef __cplusplus
  365. }
  366. #endif  /*  __cplusplus  */
  367.  
  368. #endif  /*  QD3DPick_h  */
  369.